#include<iostream>
#include<vector>
#include<string>
using namespace std;
//LeetCode 394 字符串解码
string decodeString(string s) {
    vector<char> stack;
    string result;
    //pos指向stack中最后一个元素的下标
    int pos = -1;
    //3[a]2[bc]
    for(int i=0;i<s.size();i++)
    {
        //遇到左括号将元素出栈直至遇到右括号
        if(s[i]==']')
        {
            string temp = "";
            if(stack[pos]!='[')
            {
                temp += stack[pos--];
                stack.pop_back();
            }
            else{
                //出栈左括号
                pos--;
                stack.pop_back();
                //将右括号出栈后此时栈顶元素为数字，将出栈得到的字符串循环栈顶数字次压入栈
                pos--;
                int num = stack.back();
                stack.pop_back();
                for(int j=0;j<num;j++)
                {
                    for(int k=temp.size()-1;k>0;k--)
                    {
                        stack.push_back(temp[k]);
                        pos++;
                    }
                }    
            }
        }
        //将数字压入栈
        else if(s[i]>='0'&&s[i]<='9')
        {
            int num = s[i] - '0';
            stack.push_back(num);
            pos++;
        }
        else
        {
            stack.push_back(s[i]);
            pos++;
        }
    }
    for(int i=0;i<stack.size();i++)
    {
        result += stack[i];
    }
    return result;
}
int main()
{
    string result = decodeString("3[a]2[bc]");
    cout << result;
    return 0;
}